home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
language
/
asxsrc.arc
/
ASMLNK.DOC
< prev
next >
Wrap
Text File
|
1989-08-25
|
139KB
|
4,052 lines
ASxxxx Assemblers
and
ASLINK Relocating Linker
CHAPTER 1 THE ASSEMBLER 1-1
1.1 THE ASXXXX ASSEMBLERS 1-1
1.1.1 Assembly Pass 1 1-2
1.1.2 Assembly Pass 2 1-2
1.1.3 Assembly Pass 3 1-2
1.2 SOURCE PROGRAM FORMAT 1-3
1.2.1 Statement Format 1-3
1.2.1.1 Label Field 1-3
1.2.1.2 Operator Field 1-5
1.2.1.3 Operand Field 1-5
1.2.1.4 Comment Field 1-6
1.3 SYMBOLS AND EXPRESSIONS 1-6
1.3.1 Character Set 1-6
1.3.2 User-Defined Symbols 1-10
1.3.3 Local Symbols 1-11
1.3.4 Current Location Counter 1-12
1.3.5 Numbers 1-14
1.3.6 Terms 1-14
1.3.7 Expressions 1-15
1.4 GENERAL ASSEMBLER DIRECTIVES 1-16
1.4.1 .module Directive 1-16
1.4.2 .title Directive 1-17
1.4.3 .sbttl Directive 1-17
1.4.4 .page Directive 1-17
1.4.5 .byte and .db Directives 1-17
1.4.6 .word and .dw Directives 1-18
1.4.7 .blkb, .blkw, and .ds Directives 1-18
1.4.8 .ascii Directive 1-18
1.4.9 .asciz Directive 1-19
1.4.10 .radix Directive 1-19
1.4.11 .even Directive 1-20
1.4.12 .odd Directive 1-20
1.4.13 .area Directive 1-20
1.4.14 .org Directive 1-21
1.4.15 .globl Directive 1-22
1.4.16 .if, .else, and .endif Directives 1-22
1.4.17 .include Directive 1-23
1.5 INVOKING ASXXXX 1-24
1.6 ERRORS 1-25
1.7 LISTING FILE 1-26
1.8 SYMBOL TABLE FILE 1-27
1.9 OBJECT FILE 1-28
CHAPTER 2 THE LINKER 2-1
2.1 ASLINK RELOCATING LINKER 2-1
2.2 INVOKING ASLINK 2-2
2.3 ASLINK PROCESSING 2-3
2.4 LINKER INPUT FORMAT 2-4
2.4.1 Object Module Format 2-4
2.4.2 Header Line 2-5
2.4.3 Module Line 2-5
2.4.4 Symbol Line 2-5
2.4.5 Area Line 2-5
2.4.6 T Line 2-6
2.4.7 R Line 2-6
CHAPTER 3 BUILDING ASXXXX AND ASLINK 3-1
3.1 BUILDING AN ASSEMBLER 3-1
Page ii
3.2 BUILDING ASLINK 3-2
APPENDIX A AS6800 ASSEMBLER A-1
A.1 .setdp DIRECTIVE A-1
A.2 6800 REGISTER SET A-1
A.3 6800 INSTRUCTION SET A-2
A.3.1 Inherent Instructions A-3
A.3.2 Branch Instructions A-3
A.3.3 Single Operand Instructions A-4
A.3.4 Double Operand Instructions A-5
A.3.5 Jump and Jump to Subroutine Instructions A-5
A.3.6 Long Register Instructions A-6
APPENDIX B AS6801 ASSEMBLER B-1
B.1 .setdp DIRECTIVE B-1
B.2 .hd6303 DIRECTIVE B-1
B.3 6801 REGISTER SET B-2
B.4 6801 INSTRUCTION SET B-2
B.4.1 Inherent Instructions B-3
B.4.2 Branch Instructions B-3
B.4.3 Single Operand Instructions B-3
B.4.4 Double Operand Instructions B-5
B.4.5 Jump and Jump to Subroutine Instructions B-5
B.4.6 Long Register Instructions B-5
B.4.7 6303 Specific Instructions B-6
APPENDIX C AS6804 ASSEMBLER C-1
C.1 6804 REGISTER SET C-1
C.2 6804 INSTRUCTION SET C-1
C.2.1 Inherent Instructions C-2
C.2.2 Branch Instructions C-2
C.2.3 Single Operand Instructions C-2
C.2.4 Jump and Jump to Subroutine Instructions C-2
C.2.5 Bit Test Instructions C-2
C.2.6 Load Immediate data Instruction C-3
C.2.7 6804 Derived Instructions C-3
APPENDIX D AS6805 ASSEMBLER D-1
D.1 .setdp DIRECTIVE D-1
D.2 6805 REGISTER SET D-1
D.3 6805 INSTRUCTION SET D-2
D.3.1 Control Instructions D-2
D.3.2 Bit Manipulation Instructions D-3
D.3.3 Branch Instructions D-3
D.3.4 Read-Modify-Write Instructions D-4
D.3.5 Register\Memory Instructions D-4
D.3.6 Jump and Jump to Subroutine Instructions D-5
APPENDIX E AS6809 ASSEMBLER E-1
E.1 .setdp DIRECTIVE E-1
E.2 6809 REGISTER SET E-1
E.3 6809 INSTRUCTION SET E-2
E.3.1 Inherent Instructions E-4
E.3.2 Short Branch Instructions E-4
Page iii
E.3.3 Long Branch Instructions E-4
E.3.4 Single Operand Instructions E-5
E.3.5 Double Operand Instructions E-6
E.3.6 D-register Instructions E-6
E.3.7 Index/Stack Register Instructions E-6
E.3.8 Jump and Jump to Subroutine Instructions E-7
E.3.9 Register - Register Instructions E-7
E.3.10 Condition Code Register Instructions E-7
E.3.11 6800 Compatibility Instructions E-7
APPENDIX F AS6811 ASSEMBLER F-1
F.1 .setdp DIRECTIVE F-1
F.2 6811 REGISTER SET F-1
F.3 6811 INSTRUCTION SET F-2
F.3.1 Inherent Instructions F-3
F.3.2 Branch Instructions F-3
F.3.3 Single Operand Instructions F-4
F.3.4 Double Operand Instructions F-5
F.3.5 Bit Manupulation Instructions F-5
F.3.6 Jump and Jump to Subroutine Instructions F-6
F.3.7 Long Register Instructions F-6
APPENDIX G AS8085 ASSEMBLER G-1
G.1 8085 REGISTER SET G-1
G.2 8085 INSTRUCTION SET G-1
G.2.1 Inherent Instructions G-2
G.2.2 Register/Memory/Immediate Instructions G-2
G.2.3 Call and Return Instructions G-2
G.2.4 Jump Instructions G-2
G.2.5 Input/Output/Reset Instructions G-3
G.2.6 Move Instructions G-3
G.2.7 Other Instructions G-3
APPENDIX H ASZ80 ASSEMBLER H-1
H.1 .hd64 DIRECTIVE H-1
H.2 Z80 REGISTER SET AND CONDITIONS H-1
H.3 Z80 INSTRUCTION SET H-2
H.3.1 Inherent Instructions H-3
H.3.2 Implicit Operand Instructions H-3
H.3.3 Load Instruction H-4
H.3.4 Call/Return Instructions H-4
H.3.5 Jump and Jump to Subroutine Instructions H-4
H.3.6 Bit Manipulation Instructions H-5
H.3.7 Interrupt Mode and Reset Instructions H-5
H.3.8 Input and Output Instructions H-5
H.3.9 Register Pair Instructions H-5
H.3.10 HD64180 Specific Instructions H-6
Page iv
P R E F A C E
The ASxxxx assemblers were written following the style of
several cross assemblers found in the Digital Equipment Corpora-
tion Users Society (DECUS) distribution of the C programming
language. The DECUS code was provided with no documentation as
to the input syntax or the output format. Study of the code
revealed that the unknown author of the code had attempted to
formulate an assembler with attributes similiar to those of the
PDP-11 MACRO assembler (without macro's). The incomplete code
from the DECUS C distribution has been largely rewritten, only
the program structure, and C source file organization remains
relatively unchanged. However, I wish to thank the author for
his contribution to this set of assemblers.
The ASLINK program was written as a companion to the ASxxxx
assemblers, its design and implementation was not derived from
any other work.
The ASxxxx assemblers and the ASLINK relocating linker are
placed in the Public Domain. Publication or distribution of
these programs for non-commercial use is hereby granted with the
stipulation that the copyright notice be included with all
copies.
I would greatly appreciate receiving the details of any
changes, additions, or errors pertaining to these programs and
will attempt to incorporate any fixes or generally useful
changes in a future update to these programs.
Alan R. Baldwin
Kent State University
Physics Department
Kent, Ohio 44242
CHAPTER 1
THE ASSEMBLER
1.1 THE ASXXXX ASSEMBLERS
The ASxxxx assemblers are a series of microprocessor assem-
blers written in the C programming language. Each assembler has
a device specific section which includes:
1. device description, byte order, and file extension in-
formation
2. a table of the assembler general directives, special
device directives, assembler mnemonics and associated
operation codes
3. machine specific code for processing the device mnemon-
ics, addressing modes, and special directives
The device specific information is detailed in the appendices.
The assemblers have a common device independent section which
handles the details of file input/output, symbol table genera-
tion, program/data areas, expression analysis, and assembler
directive processing.
The assemblers provide the following features:
1. Command string control of assembly functions
2. Alphabetized, formatted symbol table listing
3. Relocatable object modules
4. Global symbols for linking object modules
5. Conditional assembly directives
THE ASSEMBLER PAGE 1-2
THE ASXXXX ASSEMBLERS
6. Program sectioning directives
ASxxxx assembles one or more source files into a single relo-
catable ascii object file. The output of the ASxxxx assemblers
consists of an ascii relocatable object file(*.rel), an assembly
listing file(*.lst), and a symbol file(*.sym).
1.1.1 Assembly Pass 1
During pass 1, ASxxxx opens all source files and performs a
rudimenatry assembly of each source statement. During this pro-
cess all symbol tables are built, program sections defined, and
number of bytes for each assembled source line is estimated.
At the end of pass 1 all undefined symbols may be made global
(external) using the ASxxxx switch -g, otherwise undefined sym-
bols will be flagged as errors during succeeding passes.
1.1.2 Assembly Pass 2
During pass 2 the ASxxxx assembler resolves forward refer-
ences and determines the number of bytes for each assembled
line. The number of bytes used by a particular assembler in-
struction may depend upon the addressing mode, whether the in-
struction allows multiple forms based upon the relative distance
to the addressed location, or other factors. Pass 2 resolves
these cases and determines the address of all symbols.
1.1.3 Assembly Pass 3
Pass 3 by the assembler generates the listing file, the relo-
catable output file, and the symbol tables. Also during pass 3
the errors will be reported.
The relocatable object file is an ascii file containing sym-
bol references and definitions, program area definitions, and
the relocatable assembled code, the linker ASLINK will use this
information to generate an absolute load file (Motorola or Intel
formats).
THE ASSEMBLER PAGE 1-3
SOURCE PROGRAM FORMAT
1.2 SOURCE PROGRAM FORMAT
1.2.1 Statement Format
A source program is composed of assembly-language statements.
Each statement must be completed on one line. A line may con-
tain a maximum of 128 characters, longer lines are truncated and
lost.
An ASxxxx assembler statement may have as many as four
fields. These fields are identified by their order within the
statement and/or by separating characters between fields. The
general format of the ASxxxx statement is:
[label:] Operator Operand [;Comment(s)]
The label and comment fields are optional. The operator and
operand fields are interdependent. The operator field may be an
assembler directive or an assembly mnemonic. The operand field
may be optional or required as defined in the context of the
operator.
ASxxxx interprets and processes source statements one at a
time. Each statement causes a particular operation to be per-
formed.
1.2.1.1 Label Field -
A label is a user-defined symbol which is assigned the value
of the current location counter and entered into the user de-
fined symbol table. The current location counter is used by
ASxxxx to assign memory addresses to the source program state-
ments as they are encountered during the assembly process. Thus
a label is a means of symbolically referring to a specific
statement.
When a program section is absolute, the value of the current
location counter is absolute; its value references an absolute
memory address. Similarly, when a program section is relocat-
able, the value of the current location counter is relocatable.
A relocation bias calculated at link time is added to the ap-
parent value of the current location counter to establish its
effective absolute address at execution time. (The user can
also force the linker to relocate sections defined as absolute.
This may be required under special circumstances.)
If present, a label must be the first field in a source
statement and must be terminated by a colon (:). For example,
THE ASSEMBLER PAGE 1-4
SOURCE PROGRAM FORMAT
if the value of the current location counter is absolute
01F0(H), the statement:
abcd: nop
assigns the value 01F0(H) to the label abcd. If the location
counter value were relocatable, the final value of abcd would be
01F0(H)+K, where K represents the relocation bias of the program
section, as calculated by the linker at link time.
More than one label may appear within a single label field.
Each label so specified is assigned the same address value. For
example, if the value of the current location counter is
1FF0(H), the multiple labels in the following statement are each
assigned the value 1FF0(H):
abcd: aq: $abc: nop
Multiple labels may also appear on successive lines. For ex-
ample, the statements
abcd:
aq:
$abc: nop
likewise cause the same value to be assigned to all three la-
bels.
A double colon (::) defines the label as a global symbol.
For example, the statement
abcd:: nop
establishes the label abcd as a global symbol. The distinguish-
ing attribute of a global symbol is that it can be referenced
from within an object module other than the module in which the
symbol is defined. References to this label in other modules
are resolved when the modules are linked as a composite execut-
able image.
The legal characters for defining labels are:
A through Z
a through z
0 through 9
. (Period)
$ (Dollar sign)
_ (underscore)
A label may be any length, however, only the first eight (8)
characters are significant and, therefore must be unique among
all labels in the source program (not necessarily among
THE ASSEMBLER PAGE 1-5
SOURCE PROGRAM FORMAT
separately compiled modules). An error code(s) (m or p) will be
generated in the assembly listing if the first eight characters
in two or more labels are the same. The m code is caused by the
redeclaration of the symbol or its reference by another state-
ment. The p code is generated because the symbols location is
changing on each pass through the source file.
The label must not start with the characters 0-9, as this
designates a local symbol with special attributes described in a
later section.
1.2.1.2 Operator Field -
The operator field specifies the action to be performed. It
may consist of an instruction mnemonic (op code) or an assembler
directive.
When the operator is an instruction mnemonic, a machine in-
struction is generated and the assembler evaluates the addresses
of the operands which follow. When the operator is a directive
ASxxxx performs certain control actions or processing operations
during assembly of the source program.
Leading and trailing spaces or tabs in the operator field
have no significance; such characters serve only to separate
the operator field from the preceeding and following fields.
An operator is terminated by a space, tab or end of line.
1.2.1.3 Operand Field -
When the operator is an instruction mnemonic (op code), the
operand field contains program variables that are to be
evaluated/manipulated by the operator.
Operands may be expressions or symbols, depending on the
operator. Multiple expressions used in the operand fields may
be separated by a comma. An operand should be preceeded by an
operator field; if it is not, the statement will give an error
(q or o). All operands following instruction mnemonics are
treated as expressions.
The operand field is terminated by a semicolon when the field
is followed by a comment. For example, in the following
statement:
label: lda abcd,x ;Comment field
the tab between lda and abcd terminates the operator field and
defines the beginning of the operand field; a comma separates
THE ASSEMBLER PAGE 1-6
SOURCE PROGRAM FORMAT
the operands abcd and x; and a semicolon terminates the operand
field and defines the beginning of the comment field. When no
comment field follows, the operand field is terminated by the
end of the source line.
1.2.1.4 Comment Field -
The comment field begins with a semicolon and extends through
the end of the line. This field is optional and may contain any
7-bit ascii character except null.
Comments do not affect assembly processing or program execu-
tion.
1.3 SYMBOLS AND EXPRESSIONS
This section describes the generic components of the ASxxxx
assemblers: the character set, the conventions observed in con-
structing symbols, and the use of numbers, operators, and ex-
pressions.
1.3.1 Character Set
The following characters are legal in ASxxxx source programs:
1. The letters A through Z. Both upper- and lower-case
letters are acceptable. The assemblers are case sensi-
tive, i.e. ABCD and abcd are different symbols. (The
assemblers can be made case insensitive by recompiling
with the appropriate switches.)
2. The digits 0 through 9
3. The characters . (period), $ (dollar sign), and _ (un-
derscore).
4. The special characters listed in Tables 1 through 6.
Tables 1 through 6 describe the various ASxxxx label and
field terminators, assignment operators, operand separators, as-
sembly, unary, binary, and radix operators.
THE ASSEMBLER PAGE 1-7
SYMBOLS AND EXPRESSIONS
Table 1 Label Terminators and Assignment Operators
----------------------------------------------------------------
: Colon Label terminator.
:: Double colon Label Terminator; defines the
label as a global label.
= Equal sign Direct assignment operator.
== Double equal Direct assignment operator;
sign defines the symbol as a global
symbol.
----------------------------------------------------------------
Table 2 Field Terminators and Operand Separators
----------------------------------------------------------------
Tab Item or field terminator.
Space Item or field terminator.
, Comma Operand field separator.
; Semicolon Comment field indicator.
----------------------------------------------------------------
Table 3 Assembler Operators
----------------------------------------------------------------
# Number sign Immediate expression indicator.
. Period Current location counter.
( Left parenthesis Expression delimiter.
) Right parenthesis Expression delimeter.
----------------------------------------------------------------
THE ASSEMBLER PAGE 1-8
SYMBOLS AND EXPRESSIONS
Table 4 Unary Operators
----------------------------------------------------------------
< Left bracket <FEDC Produces the lower byte
value of the expression.
(DC)
> Right bracket >FEDC Produces the upper byte
value of the expression.
(FE)
+ Plus sign +A Positive value of A
- Minus sign -A Produces the negative
(2's complement) of A.
' Single quote 'D Produces the value of
the character D.
" Double quote "AB Produces the double byte
value for AB.
\ Backslash '\n Unix style characters
\b, \f, \n, \r, \t
or '\001 or octal byte values.
----------------------------------------------------------------
THE ASSEMBLER PAGE 1-9
SYMBOLS AND EXPRESSIONS
Table 5 Binary Operators
----------------------------------------------------------------
<< Double 0800 << 4 Produces the 4 bit
Left bracket left-shifted value of
0800. (8000)
>> Double 0800 >> 4 Produces the 4 bit
Right bracket right-shifted value of
0800. (0080)
+ Plus sign A + B Arithmetic Addition
operator.
- Minus sign A - B Arithmetic Subtraction
operator.
* Asterisk A * B Arithmetic Multiplica-
tion operator. (signed
16-bit)
/ Slash A / B Arithmetic Division
operator. (signed
16-bit quotient)
& Ampersand A & B Logical AND operator.
| Bar A | B Logical OR operator.
% Percent sign A % B Modulus operator.
(16-bit value)
^ Up arrow or A ^ B EXCLUSIVE OR operator.
circumflex
----------------------------------------------------------------
THE ASSEMBLER PAGE 1-10
SYMBOLS AND EXPRESSIONS
Table 6 Temporary Radix Operators
----------------------------------------------------------------
0b, 0B Binary radix operator.
0@, 0o, 0O, 0q, 0Q Octal radix operator.
0d, 0D Decimal radix operator.
0h, 0H, 0x, 0X Hexidecimal radix operator.
----------------------------------------------------------------
1.3.2 User-Defined Symbols
User-defined symbols are those symbols that are equated to a
specific value through a direct assignment statement or appear
as labels. These symbols are added to the User Symbol Table as
they are encountered during assembly.
The following rules govern the creation of user-defined symbols:
1. Symbols can be composed of alphanumeric characters,
dollar signs ($), periods (.), and underscores (_)
only.
2. The first character of a symbol must not be a number
(except in the case of local symbols).
3. The first eight characters of a symbol must be unique.
A symbol can be written with more than eight legal
characters, but the ninth and subsequent characters are
ignored.
4. Spaces and Tabs must not be embedded within a symbol.
THE ASSEMBLER PAGE 1-11
SYMBOLS AND EXPRESSIONS
1.3.3 Local Symbols
Local symbols are specially formatted symbols used as labels
within a block of coding that has been delimited as a local sym-
bol block. Local symbols are of the form n$, where n is a
decimal integer from 0 to 255, inclusive. Examples of local
symbols are:
1$
27$
138$
244$
The range of a local symbol block consists of those state-
ments between two normally constructed symbolic labels. Note
that a statement of the form:
ALPHA = EXPRESSION
is a direct assignment statement but does not create a label and
thus does not delimit the range of a local symbol block.
Note that the range of a local symbol block may extend across
program areas.
Local symbols provide a convenient means of generating labels
for branch instructions and other such references within local
symbol blocks. Using local symbols reduces the possibility of
symbols with multiple definitions appearing within a user pro-
gram. In addition, the use of local symbols differentiates
entry-point labels from local labels, since local labels cannot
be referenced from outside their respective local symbol blocks.
Thus, local symbols of the same name can appear in other local
symbol blocks without conflict. Local symbols require less sym-
bol table space than normal symbols. Their use is recommended.
The use of the same local symbol within a local symbol block
will generate one or both of the m or p errors.
THE ASSEMBLER PAGE 1-12
SYMBOLS AND EXPRESSIONS
Example of local symbols:
a: ldx #atable ;get table address
lda #0d48 ;table length
1$: clr ,x+ ;clear
deca
bne 1$
b: ldx #btable ;get table address
lda #0d48 ;table length
1$: clr ,x+ ;clear
deca
bne 1$
1.3.4 Current Location Counter
The period (.) is the symbol for the current location coun-
ter. When used in the operand field of an instruction, the
period represents the address of the first byte of the
instruction:
AS: ldx #. ;The period (.) refers to
;the address of the ldx
;instruction.
When used in the operand field of an ASxxxx directive, it
represents the address of the current byte or word:
QK = 0
.word 0xFFFE,.+4,QK ;The operand .+4 in the .word
;directive represents a value
;stored in the second of the
;three words during assembly.
If we assume the current value of the program counter is
0H0200, then during assembly, ASxxxx reserves three words of
storage starting at location 0H0200. The first value, a hex-
idecimal constant FFFE, will be stored at location 0H0200. The
second value represented by .+4 will be stored at location
0H0202, its value will be 0H0206 ( = 0H0202 + 4). The third
value defined by the symbol QK will be placed at location
0H0204.
At the beginning of each assembly pass, ASxxxx resets the lo-
cation counter. Normally, consecutive memory locations are as-
signed to each byte of object code generated. However, the
value of the location counter can be changed through a direct
assignment statement of the following form:
THE ASSEMBLER PAGE 1-13
SYMBOLS AND EXPRESSIONS
. = . + expression
The new location counter can only be specified relative to
the current location counter. Neglecting to specify the current
program counter along with the expression on the right side of
the assignment operator will generate the (.) error. (Absolute
program areas may use the .org directive to specify the absolute
location of the current program counter.)
The following coding illustrates the use of the current location
counter:
.area CODE1 (ABS) ;program area CODE1
;is ABSOLUTE
.org 0H100 ;set location to
;0H100 absolute
num1: ldx #.+0H10 ;The label num1 has
;the value 0H100.
;X is loaded with
;0H100 + 0H10
.org 0H130 ;location counter
;set to 0H130
num2: ldy #. ;The label num2 has
;the value 0H130.
;Y is loaded with
;value 0H130.
.area CODE2 (REL) ;program area CODE2
;is RELOCATABLE
. = . + 0H20 ;Set location counter
;to relocatable 0H20 of
;the program section.
num3: .word 0 ;The label num3 has
;the value
;of relocatable 0H20.
. = . + 0H40 ;will reserve 0H40
;bytes of storage as will
.blkb 0H40 ;or
.blkw 0H20
The .blkb and .blkw directives are the preferred methods of
allocating space.
THE ASSEMBLER PAGE 1-14
SYMBOLS AND EXPRESSIONS
1.3.5 Numbers
ASxxxx assumes that all numbers in the source program are to
be interpreted in decimal radix unless otherwise specified. The
.radix directive may be used to specify the default as octal,
decimal, or hexidecimal. Individual numbers can be designated
as binary, octal, decimal, or hexidecimal through the temporary
radix prefixes shown in table 6.
Negative numbers must be preceeded by a minus sign; ASxxxx
translates such numbers into two's complement form. Positive
numbers may (but need not) be preceeded by a plus sign.
Numbers are always considered to be absolute values, therefor
they are never relocatable.
1.3.6 Terms
A term is a component of an expression and may be one of the
following:
1. A number.
2. A symbol:
1. A period (.) specified in an expression causes the
current location counter to be used.
2. A User-defined symbol.
3. An undefined symbol is assigned a value of zero and
inserted in the User-Defined symbol table as an un-
defined symbol.
3. A single quote followed by a single ascii character, or
a double quote followed by two ascii characters.
4. An expression enclosed in parenthesis. Any expression
so enclosed is evaluated and reduced to a single term
before the remainder of the expression in which it ap-
pears is evaluated. Parenthesis, for example, may be
used to alter the left-to-right evaluation of expres-
sions, (as in A*B+C versus A*(B+C)), or to apply a un-
ary operator to an entire expression (as in -(A+B)).
5. A unary operator followed by a symbol or number.
THE ASSEMBLER PAGE 1-15
SYMBOLS AND EXPRESSIONS
1.3.7 Expressions
Expressions are combinations of terms joined together by
binary operators. Expressions reduce to a 16-bit value. The
evaluation of an expression includes the determination of its
attributes. A resultant expression value may be one of three
types (as described later in this section): relocatable, ab-
solute, and external.
Expressions are evaluate with an operand hierarchy as follows:
* / % multiplication,
division, and
modulus first.
+ - addition and
subtraction second.
<< >> left shift and
right shift third.
^ exclusive or fourth.
& logical and fifth.
| logical or last
except that unary operators take precedence over binary
operators.
A missing or illegal operator terminates the expression
analysis, causing error codes (o) and/or (q) to be generated
depending upon the context of the expression itself.
At assembly time the value of an external (global) expression
is equal to the value of the absolute part of that expression.
For example, the expression external+4, where 'external' is an
external symbol, has the value of 4. This expression, however,
when evaluated at link time takes on the resolved value of the
symbol 'external', plus 4.
Expressions, when evaluated by ASxxxx, are one of three
types: relocatable, absolute, or external. The following dis-
tinctions are important:
1. An expression is relocatable if its value is fixed re-
lative to the base address of the program area in which
it appears; it will have an offset value added at link
time. Terms that contain labels defined in relocatable
program areas will have a relocatable value;
THE ASSEMBLER PAGE 1-16
SYMBOLS AND EXPRESSIONS
similarly, a period (.) in a relocatable program area,
representing the value of the current program location
counter, will also have a relocatable value.
2. An expression is absolute if its value is fixed. An
expression whose terms are numbers and ascii characters
will reduce to an absolute value. A relocatable ex-
pression or term minus a relocatable term, where both
elements being evaluated belong to the same program
area, is an absolute expression. This is because every
term in a program area has the same relocation bias.
When one term is subtracted from the other the reloca-
tion bias is zero.
3. An expression is external (or global) if it contains a
single global reference (plus or minus an absolute ex-
pression value) that is not defined within the current
program. Thus, an external expression is only par-
tially defined following assembly and must be resolved
at link time.
1.4 GENERAL ASSEMBLER DIRECTIVES
An ASxxxx directive is placed in the operator field of the
source line. Only one directive is allowed per source line.
Each directive may have a blank operand field or one or more
operands. Legal operands differ with each directive.
1.4.1 .module Directive
Format:
.module string
The .module directive causes the string to be included in the
assemblers output file as an identifier for this particular ob-
ject module. The string may be from 1 to 8 characters in
length. Only one identifier is allowed per assembled module.
The main use of this directive is to allow the linker to report
a modules' use of undefined symbols. At link time all undefined
symbols are reported and the modules referencing them are
listed.
THE ASSEMBLER PAGE 1-17
GENERAL ASSEMBLER DIRECTIVES
1.4.2 .title Directive
Format:
.title string
The .title directive provides a character string to be placed
on the second line of each page during listing.
1.4.3 .sbttl Directive
Format:
.sbttl string
The .sbttl directive provides a character string to be placed
on the third line of each page during listing.
1.4.4 .page Directive
Format:
.page
The .page directive causes a page ejection with a new heading
to be printed. The new page occurs after the next line of the
source program is processed, this allows an immediately follow-
ing .sbttl directive to appear on the new page. The .page
source line will not appear in the file listing.
1.4.5 .byte and .db Directives
Format:
.byte exp ;Stores the binary value
.db exp ;of the expression in the
;next byte.
.byte exp1,exp2,expn ;Stores the binary values
.db exp1,exp2,expn ;of the list of expressions
;in successive bytes.
where: exp, represent expressions that will be
exp1, truncated to 8-bits of data.
. Each expression will be calculated
. as a 16-bit word expression,
. the high-order byte will be truncated.
. Multiple expressions must be
expn separated by commas.
THE ASSEMBLER PAGE 1-18
GENERAL ASSEMBLER DIRECTIVES
The .byte or .db directives are used to generate successive
bytes of binary data in the object module.
1.4.6 .word and .dw Directives
Format:
.word exp ;Stores the binary value
.dw exp ;of the expression in
;the next word.
.word exp1,exp2,expn ;Stores the binary values
.dw exp1,exp2,expn ;of the list of expressions
;in successive words.
where: exp, represent expressions that will occupy two
exp1, bytes of data. Each expression will be
. calculated as a 16-bit word expression.
. Multiple expressions must be
expn separated by commas.
The .word or .dw directives are used to generate successive
words of binary data in the object module.
1.4.7 .blkb, .blkw, and .ds Directives
Format:
.blkb N ;reserve N bytes of space
.blkw N ;reserve N words of space
.ds N ;reserve N bytes of space
The .blkb and .ds directives reserve byte blocks in the ob-
ject module; the .blkw directive reserves word blocks.
1.4.8 .ascii Directive
Format:
.ascii /string/
where: string is a string of printable ascii characters.
/ / represent the delimiting characters. These
delimiters may be any paired printing
characters, as long as the characters are not
contained within the string itself. If the
delimiting characters do not match, the .ascii
directive will give the (q) error.
THE ASSEMBLER PAGE 1-19
GENERAL ASSEMBLER DIRECTIVES
The .ascii directive places one binary byte of data for each
character in the string into the object module.
1.4.9 .asciz Directive
Format:
.asciz /string/
where: string is a string of printable asciz characters.
/ / represent the delimiting characters. These
delimiters may be any paired printing
characters, as long as the characters are not
contained within the string itself. If the
delimiting characters do not match, the .asciz
directive will give the (q) error.
The .ascii directive places one binary byte of data for each
character in the string into the object module. Following all
the character data a zero byte is inserted to terminate the
character string.
1.4.10 .radix Directive
Format:
.radix character
where: character represents a single character specifying the
default radix to be used for succeeding numbers.
The character may be any one of the following:
B,b Binary
O,o Octal
Q,q
@
D,d Decimal
'blank'
H,h Hexidecimal
X,x
THE ASSEMBLER PAGE 1-20
GENERAL ASSEMBLER DIRECTIVES
1.4.11 .even Directive
Format:
.even
The .even directive ensures that the current location counter
contains an even boundary value by adding 1 if the current loca-
tion is odd.
1.4.12 .odd Directive
Format:
.odd
The .odd directive ensures that the current location counter
contains an odd boundary value by adding one if the current lo-
cation is even.
1.4.13 .area Directive
Format:
.area name [(options)]
where: name represents the symbolic name of the program sec-
tion. This name may be the same as any
user-defined symbol as the area names are in-
dependent of all symbols and labels.
options specify the type of program or data area:
ABS absolute (automatically invokes OVR)
REL relocatable
OVR overlay
CON concatenate
The .area directive provides a means of defining and separat-
ing multiple programming and data sections. The name is the
area label used by the assembler and the linker to collect code
from various separately assembled modules into one section. The
name may be from 1 to 8 characters in length.
The options are specified within parenthesis and separated by
commas as shown in the following example:
.area TEST (REL,CON) ;This section is relocatable
;and concatenated with other
;sections of this program area.
THE ASSEMBLER PAGE 1-21
GENERAL ASSEMBLER DIRECTIVES
.area DATA (REL,OVR) ;This section is relocatable
;and overlays other sections
;of this program area.
.area SYS (ABS,OVR) ;(CON not allowed with ABS)
;This section is defined as
;absolute. Absolute sections
;are always overlayed with
;other sections of this program
;area.
The default area type is REL|CON; i.e. a relocatable sec-
tion which is concatenated with other sections of code with the
same area name. The ABS option indicates an absolute area. The
OVR and CON options indicate if program sections of the same
name will overlay each other (start at the same location) or be
concatenated with each other (appended to each other).
Multiple invocations of the .area directive with the same
name must specify the same options or leave the options field
blank, this defaults to the previously specified options for
this program area.
The ASxxxx assemblers automatically provide two program
sections:
'. .ABS.' This dumby section contains all absolute
symbols and their values.
'_CODE' This is the default program/data area.
This program area is of type (REL,CON).
1.4.14 .org Directive
Format:
.org exp
where: exp is an absolute expression that becomes the cur-
rent location counter.
The .org directive is valid only in an absolute program section
and will give a (q) error if used in a relocatable program area.
The .org directive specifies that the current location counter
is to become the specified absolute value.
THE ASSEMBLER PAGE 1-22
GENERAL ASSEMBLER DIRECTIVES
1.4.15 .globl Directive
Format:
.globl sym1,sym2,...,symn
where: sym1, represent legal symbolic names. When
sym2,... When multiple symbols are specified,
symn they are separated by commas.
A .globl directive may also have a label field and/or a com-
ment field.
The .globl directive is provided to define (and thus provide
linkage to) symbols not otherwise defined as global symbols
within a module. In defining global symbols the directive
.globl J is similar to:
J == expression or J::
Because object modules are linked by global symbols, these
symbols are vital to a program. All internal symbols appearing
within a given program must be defined at the end of pass 1 or
they will be considered undefined. The assembly directive (-g)
can be be invoked to make all undefined symbols global at the
end of pass 1.
1.4.16 .if, .else, and .endif Directives
Format:
.if expr
. ;}
. ;} range of true condition
. ;}
.else
. ;}
. ;} range of false condition
. ;}
.endif
The conditional assembly directives allow you to include or
exclude blocks of source code during the assembly process, based
on the evaluation of the condition test.
The range of true condition will be processed if the expres-
sion 'expr' is not zero (i.e. true) and the range of false con-
dition will be processed if the expression 'expr' is zero (i.e
false). The range of true condition is optional as is the .else
directive and the range of false condition. The following are
all valid .if/.else/.endif constructions:
THE ASSEMBLER PAGE 1-23
GENERAL ASSEMBLER DIRECTIVES
.if A-4 ;evaluate A-4
.byte 1,2 ;insert bytes if A-4 is
.endif ;not zero
.if K+3 ;evaluate K+3
.else
.byte 3,4 ;insert bytes if K+3
.endif ;is zero
.if J&3 ;evaluate J masked by 3
.byte 12 ;insert this byte if J&3
.else ;is not zero
.byte 13 ;insert this byte if J&3
.endif ;is zero
The .if/.else/.endif directives may be nested upto 10 levels.
The .page directive is processed within a false condition
range to allow extended textual information to be incorporated
in the source program with out the need to use the comment
delimiter (;):
.if 0
.page
This text will be bypassed during assembly
but appear in the listing file.
.
.
.
.endif
1.4.17 .include Directive
Format:
.include string
where: string represents a delimited string that is the file
specification of an ASxxxx source file.
The .include directive is used to insert a source file within
the source file currently being assembled. When this directive
is encountered, an implicit .page directive is issued. When the
end of the specified source file is reached, an implicit .page
directive is issued and input continues from the previous source
file. The maximum nesting level of source files specified by a
THE ASSEMBLER PAGE 1-24
GENERAL ASSEMBLER DIRECTIVES
.include directive is five. The line containing the .include
directive will not appear in the listing file.
The total number of separately specified .include files is
unlimited as each .include file is opened and then closed during
each pass made by the assembler.
1.5 INVOKING ASXXXX
The ASxxxx assemblers are command line oriented. After the
assembler is started, enter the option(s) and file(s) to assem-
ble following the 'argv:' prompt:
argv: [-dqxgalos] file1 [file2 file3 ... file6]
The options are:
d decimal listing
q octal listing
x hex listing (default)
The listing radix affects the
.lst, .rel, and .sym files.
g undefined symbols made global
a all user symbols made global
l create list output file1.lst
o create object output file1.rel
s create symbol output file1.sym
The file name for .lst, .rel, and .sym files is the first
file name specified in the command line. All output files are
ascii text files which may be edited, copied, etc. The output
files are the concatenation of all the input files, if files are
to be assembled independently invoke the assembler for each
file.
The .rel file contains a radix directive so that the linker
will use the proper conversion for this file. Linked files may
have different radices.
If the list (l) option is specified without the symbol table
(s) option, the symbol table is placed at the end of the listing
file.
THE ASSEMBLER PAGE 1-25
ERRORS
1.6 ERRORS
The ASxxxx assemblers provide limited diagnostic error codes
during the assembly process, these errors will be noted in the
listing file and printed on the stderr device. The errors are:
(.) This error is caused by an absolute direct assign-
ment of the current location counter
. = expression (incorrect)
rather than the correct
. = . + expression
(a) Indicates a machine specific addressing or address-
ing mode error.
(i) Caused by an .include file error or an .if/.endif
mismatch.
(m) Multiple definitions of the same label, multiple
.module directives, or multiple conflicting attri-
butes in an .area directive.
(o) Directive or mnemonic error or the use of the .org
directive in a relocatable area.
(p) Phase error: label location changing between passes
2 and 3. Normally caused by having more than one
level of forward referencing.
(q) Questionable syntax: missing or improper operators,
terminators, or delimiters.
(r) Relocation error: logic operation attempted on a
relocatable term, addition of two relocatable terms,
subtraction of two relocatable terms not within the
same programming area or external symbols.
(u) Undefined symbol encountered during assembly.
THE ASSEMBLER PAGE 1-26
LISTING FILE
1.7 LISTING FILE
The (-l) option produces an ascii output listing file. Each
page of output contains a four line header:
1. The ASxxxx program name and page number
2. Title from a .title directive (if any)
3. Subtitle from a .sbttl directive (if any)
4. Blank line
Each succeeding line contains five fields:
1. Error field (first three characters of line)
2. Current location counter
3. Generated code in byte format
4. Source text line number
5. Source text
The error field may contain upto 3 error flags indicating any
errors encountered while assembling this line of source code.
The current location counter field displays the 16-bit pro-
gram position. This field will be in the selected radix.
The generated code follows the program location. The listing
radix determines the number of bytes that will be displayed in
this field. Hexidecimal listing allows six bytes of data within
the field, decimal and octal allow four bytes within the field.
If more than one field of data is generated from the assembly of
a single line of source code, then the data field is repeated on
successive lines.
The source text line number is printed in decimal and is fol-
lowed by the source text.
Two special cases will disable the listing of a line of
source text:
THE ASSEMBLER PAGE 1-27
LISTING FILE
1. Source line with a .page directive is never listed.
2. Source line with a .include file directive is not
listed unless the .include file cannot be opened.
1.8 SYMBOL TABLE FILE
The symbol table has two parts:
1. The alphabetically sorted list of symbols and/or labels
defined or referenced in the source program.
2. A list of the program areas defined during assembly of
the source program.
The sorted list of symbols and/or labels contains the follow-
ing information:
1. Program area number (none if absolute value or exter-
nal)
2. The symbol or label
3. Directly assigned symbol is denoted with an (=) sign
4. The value of a symbol, location of a label relative to
the program area base address (=0), or a **** indicat-
ing the symbol or label is undefined.
5. The characters: G - global, R - relocatable, and X -
external.
The list of program areas provides the correspondence between
the program area numbers and the defined program areas, the size
of the program areas, and the area flags (attributes).
THE ASSEMBLER PAGE 1-28
OBJECT FILE
1.9 OBJECT FILE
The object file is an ascii file containing the information
needed by the linker to bind multiple object modules into a com-
plete loadable memory image. The object module contains the
following designators:
[XDQ][HL]
X Hexidecimal radix
D Decimal radix
Q Octal radix
H Most significant byte first
L Least significant byte first
H Header
M Module
A Area
S Symbol
T Object code
R Relocation information
Refer to the linker for a detailed description of each of the
designators and the format of the information contained in the
object file.
CHAPTER 2
THE LINKER
2.1 ASLINK RELOCATING LINKER
ASLINK is the companion linker for the ASxxxx assemblers.
The program ASLINK is a general relocating linker performing
the following functions:
1. Bind multiple object modules into a single memory image
2. Resolve inter-module symbol references
3. Combine code belonging to the same area from multiple
object files into a single contiguous memory region
4. Perform byte and word program counter relative
(pc or pcr) addressing calculations
5. Define absolute symbol values at link time
6. Define absolute area base address values at link time
7. Produce Intel Hex or Motorola S19 output file
8. Produce a map of the linked memory image
THE LINKER PAGE 2-2
INVOKING ASLINK
2.2 INVOKING ASLINK
The linker may run in the command line mode or command file
modes. The allowed startup linker commands are:
-c/-f command line / command file modes
-p/-n enable/disable echo file.lnk input to stdout
If command line mode is selected, all linker commands come
from stdin, if the command file mode is selected the commands
are input from the specified file (extension must be .lnk).
The linker is started via
ASLINK -(cfpn)
After invoking the linker the valid options are:
1. -i/-s Intel Hex (file.ihx) or Motorola S19 (file.s19)
image output file.
2. -m Generate a map file (file.map). This file con-
tains a list of the symbols (by area) with absolute ad-
dresses, sizes of linked areas, and other linking
information.
3. -xdq Specifies the number radix for the map file
(Hexidecimal, Decimal, or Octal).
4. fileN Files to be linked. Files may be on the same
line as the above options or on a separate line(s) one
file per line or multiple files separated by spaces or
tabs.
5. -b area = expression (one definition per line)
This specifies an area base address where the expres-
sion may contain constants and/or defined symbols from
the linked files.
6. -g symbol = expression (one definition per line)
This specifies the value for the symbol where the ex-
pression may contain constants and/or defined symbols
from the linked files.
7. -e or null line, terminates input to the linker.
THE LINKER PAGE 2-3
ASLINK PROCESSING
2.3 ASLINK PROCESSING
The linker processes the files in the order they are
presented. The first pass through the input files is used to
define all program areas, the section area sizes, and symbols
defined or referenced. After the first pass the -b (area base
address) definitions, if any, are processed and the areas
linked.
The area linking proceeds by first examining the area types
ABS, CON, REL, and OVR. Absolute areas (ABS) from separate ob-
ject modules are always overlayed and have been assembled at a
specific address, these are not normally relocated (if a -b com-
mand is used on an absolute area the area will be relocated).
Relative areas (normally defined as REL|CON) have a base address
of 0x0000 as read from the object files, the -b command speci-
fies the beginning address of the area. All subsequent relative
areas will be concatenated with proceeding relative areas.
Where specific ordering is desired, the first linker input file
should have the area definitions in the desired order. At the
completion of the area linking all area addresses and lengths
have been determined.
Next the global symbol definitions (-g option), if any, are
processed. The symbol definitions have been delayed until this
point because the absolute addresses of all internal symbols are
known and can be used in the expression calculations.
Before continuing with the linking process the symbol table
is scanned to determine if any symbols have been referenced but
not defined. Undefined symbols are listed on the stderr device.
if a .module directive was included in the assembled file the
module making the reference to this undefined variable will be
printed.
Constants defined as global in more than one module will be
flagged as multiple definitions if their values are not identi-
cal.
After the preceeding processes are complete the linker may
output a map file (-m option). This file provides the following
information:
1. Global symbol values and label absolute addresses
2. Defined areas and there lengths
3. Remaining undefined symbols
4. List of modules linked
THE LINKER PAGE 2-4
ASLINK PROCESSING
5. List of -b and -g definitions
The final step of the linking process is performed during the
second pass of the input files. As the xxx.rel files are read
the code is relocated by substituting the physical addresses for
the referenced symbols and areas and may be output in Intel or
Motorola formats. The number of files linked and symbols de-
fined/referenced is limited by the processor space available to
build the area/symbol lists.
2.4 LINKER INPUT FORMAT
The linkers' input object file is an ascii file containing
the information needed by the linker to bind multiple object
modules into a complete loadable memory image.
The object module contains the following designators:
[XDQ][HL]
X Hexidecimal radix
D Decimal radix
Q Octal radix
H Most significant byte first
L Least significant byte first
H Header
M Module
A Area
S Symbol
T Object code
R Relocation information
2.4.1 Object Module Format
The first line of an object module contains the [XDQ][HL]
format specifier (i.e. XH indicates a hexidecimal file with
most significant byte first) for the following designators.
THE LINKER PAGE 2-5
LINKER INPUT FORMAT
2.4.2 Header Line
H aa areas gg global symbols
The header line specifies the number of areas(aa) and the
number of global symbols(gg) defined or referenced in this ob-
ject module segment.
2.4.3 Module Line
M name
The module line specifies the module name from which this
header segment was assembled. The module line will not appear
if the .module directive was not used in the source program.
2.4.4 Symbol Line
S string Defnnnn
or
S string Refnnnn
The symbol line defines (Def) or references (Ref) the symbol
'string' with the value nnnn. The defined value is relative to
the current area base address. References to constants and ex-
ternal global symbols will always appear before the first area
definition. References to external symbols will have a value of
zero.
2.4.5 Area Line
A label size ss flags ff
The area line defines the area label, the size (ss) of the
area in bytes, and the area flags (ff). The area flags specify
the ABS, REL, CON, and OVR parameters:
OVR/CON (0x04/0x00 i.e. bit position 2)
ABS/REL (0x08/0x00 i.e. bit position 3)
THE LINKER PAGE 2-6
LINKER INPUT FORMAT
2.4.6 T Line
T xx xx nn nn nn nn nn ...
The T line contains the assembled code output by the assem-
bler with xx xx being the offset address from the current area
base address and nn being the assembled instructions and data in
byte format.
2.4.7 R Line
R 0 0 nn nn n1 n2 xx xx ...
The R line provides the relocation information to the linker.
The nn nn value is the current area index, i.e. which area the
current relocation references. Relocation information is en-
coded in groups of 4 bytes:
1. n1 is the relocation mode
1. bit 0 word(0x00)/byte(0x01)
2. bit 1 relocatable area(0x00)/symbol(0x02)
3. bit 2 normal(0x00)/PC relative(0x04) relocation
2. n2 is a byte index into the corresponding (i.e. pre-
ceeding) T line data (i.e. a pointer to the data to be
updated by the relocation)
3. xx xx is the area/symbol index for the area/symbol be-
ing referenced. the corresponding area/symbol is found
in the header area/symbol lists.
The groups of 4 bytes are repeated for each item requiring relo-
cation in the preceeding T line.
CHAPTER 3
BUILDING ASXXXX AND ASLINK
The assemblers and linker have been successfully compiled us-
ing the DECUS C compiler (patch level 9) with RT-11/TSX+ and
with Borland's Turbo C V1.5 with MS-DOS. The only difference is
the definition of 'VOID' (contained in asm.h and aslink.h) as
'char' in DECUS C and as 'void' in Turbo C.
The device specific header file (i.e. 6800.h, 6801.h, etc.)
contains the DECUS C 'BUILD' directives for generating a command
file to compile, assemble, and link the necessary files to pre-
pare an executable image for a particular assembler.
3.1 BUILDING AN ASSEMBLER
The building of a typical assembler (6809 for example) re-
quires the following files:
1. 6809.H
2. M09EXT.C
3. M09MCH.C
4. M09ADR.C
5. M09PST.C
6. ASM.H
7. ASMAIN.C
8. ASLEX.C
9. ASSYM.C
10. ASSUBR.C
11. ASEXPR.C
12. ASDATA.C
13. ASLIST.C
14. ASOUT.C
The first five files are the 6809 processor dependent sec-
tions which contain the following:
BUILDING ASXXXX AND ASLINK PAGE 3-2
BUILDING AN ASSEMBLER
1. 6809.h - header file containing the machine specific
definitions of constants, variables, structures, and
types
2. m09ext - device description, byte order, and file ex-
tension information
3. m09pst - a table of the assembler general directives,
special device directives, and assembler mnemonics with
associated operation codes
4. m09mch / m09adr - machine specific code for processing
the device mnemonics, addressing modes, and special
directives
The remaining nine files provide the device independent sec-
tions which handle the details of file input/output, symbol
table generation, program/data areas, expression analysis, and
assembler directive processing.
The assembler defaults to the case sensitive mode. This may
be altered by changing the case sensitivity flag in asm.h to
/*
* Case Sensitivity Flag
*/
#define CASE_SENSITIVE 0
The assemblers and linker should be compiled with the same
case sensitivity option.
The DECUS C build files are asxxxx.bld and the Turbo C pro-
ject files are asxxxx.prj.
3.2 BUILDING ASLINK
The building of the linker requires the following files:
1. ASLINK.H
2. LKMAIN.C
3. LKLEX.C
4. LKAREA.C
5. LKHEAD.C
6. LKSYM.C
7. LKEVAL.C
8. LKDATA.C
9. LKLIST.C
10. LKRLOC.C
BUILDING ASXXXX AND ASLINK PAGE 3-3
BUILDING ASLINK
11. LKS19.C
12. LKIHX.C
The linker defaults to the case sensitive mode. This may be
altered by changing the case sensitivity flag in aslink.h to
/*
* Case Sensitivity Flag
*/
#define CASE_SENSITIVE 0
The linker and assemblers should be compiled with the same
case sensitivity option.
The DECUS C build file is aslink.bld and the Turbo C project
file is aslink.prj.
APPENDIX A
AS6800 ASSEMBLER
A.1 .setdp DIRECTIVE
Format:
.setdp [area]
The .setdp directive informs the assembler in which area the
direct page is located. If the optional area name is left
blank, then the current area is defined as containing the direct
page. If a .setdp directive is not issued the assembler
defaults the direct page to the area "_CODE". The .setdp direc-
tive is required when using the relocation features so that the
direct page space may be independently positioned at link time.
The assembler verifies that any variable referenced as a
direct variable is located in this area and has a value from 0
to 255.
A.2 6800 REGISTER SET
The following is a list of the 6800 registers used by AS6800:
a,b - 8-bit accumulators
x - index register
AS6800 ASSEMBLER PAGE A-2
6800 INSTRUCTION SET
A.3 6800 INSTRUCTION SET
The following tables list all 6800/6802/6808 mnemonics recog-
nized by the AS6800 assembler. The designation [] refers to a
required addressing mode argument. The following list specifies
the format for each addressing mode supported by AS6800:
#data immediate data
byte or word data
*dir direct page addressing
(see .setdp directive)
0 <= dir <= 255
(the value of dir must be defined
within the current assembly)
,x register indirect addressing
zero offset
offset,x register indirect addressing
0 <= offset <= 255
(the value of offset must be defined
within the current assembly)
ext extended addressing
label branch label
The terms data, dir, offset, ext, and label may all be expres-
sions. The terms dir, offset, and label are not allowed to be
external references.
Note that not all addressing modes are valid with every in-
struction, refer to the 6800 technical data for valid modes.
AS6800 ASSEMBLER PAGE A-3
6800 INSTRUCTION SET
A.3.1 Inherent Instructions
aba cba
clc cli
clv daa
des dex
ins inx
nop rti
rts sba
sec sei
sev swi
tab tap
tba tpa
tsx txs
wai
psha pshb
psh a psh b
pula pulb
pul a pul b
A.3.2 Branch Instructions
bra label bhi label
bls label bcc label
bhs label bcs label
blo label bne label
beq label bvc label
bvs label bpl label
bmi label bge label
blt label bgt label
ble label bsr label
AS6800 ASSEMBLER PAGE A-4
6800 INSTRUCTION SET
A.3.3 Single Operand Instructions
asla aslb
asl a asl b
asl []
asra asrb
asr a asr b
asr []
clra clrb
clr a clr b
clr []
coma comb
com a com b
com []
deca decb
dec a dec b
dec []
inca incb
inc a inc b
inc []
lsla lslb
lsl a lsl b
lsl []
lsra lsrb
lsr a lsr b
lsr []
nega negb
neg a neg b
neg []
rola rolb
rol a rol b
rol []
rora rorb
ror a ror b
ror []
tsta tstb
tst a tst b
tst []
AS6800 ASSEMBLER PAGE A-5
6800 INSTRUCTION SET
A.3.4 Double Operand Instructions
adca [] adcb []
adc a [] adc b []
adda [] addb []
add a [] add b []
anda [] andb []
and a [] and b []
bita [] bitb []
bit a [] bit b []
cmpa [] cmpb []
cmp a [] cmp b []
eora [] eorb []
eor a [] eor b []
ldaa [] ldab []
lda a [] lda b []
oraa [] orab []
ora a [] ora b []
sbca [] sbcb []
sbc a [] sbc b []
staa [] stab []
sta a [] sta b []
suba [] subb []
sub a [] sub b []
A.3.5 Jump and Jump to Subroutine Instructions
jmp [] jsr []
AS6800 ASSEMBLER PAGE A-6
6800 INSTRUCTION SET
A.3.6 Long Register Instructions
cpx []
lds [] sts []
ldx [] stx []
APPENDIX B
AS6801 ASSEMBLER
B.1 .setdp DIRECTIVE
Format:
.setdp [area]
The .setdp directive informs the assembler in which area the
direct page is located. If the optional area name is left
blank, then the current area is defined as containing the direct
page. If a .setdp directive is not issued the assembler
defaults the direct page to the area "_CODE". The .setdp direc-
tive is required when using the relocation features so that the
direct page space may be positioned properly at link time.
The assembler verifies that any variable referenced as a
direct variable is located in this area and has a value from 0
to 255.
B.2 .hd6303 DIRECTIVE
Format:
.hd6303
The .hd6303 directive enables processing of the HD6303 specific
mnemonics not included in the 6801 instruction set. HD6303
mnemonics encountered without the .hd6303 directive will be
flagged with an 'o' error.
AS6801 ASSEMBLER PAGE B-2
6801 REGISTER SET
B.3 6801 REGISTER SET
The following is a list of the 6801 registers used by AS6801:
a,b - 8-bit accumulators
d - 16-bit accumulator <a:b>
x - index register
B.4 6801 INSTRUCTION SET
The following tables list all 6801/6303 mnemonics recognized
by the AS6801 assembler. The designation [] refers to a re-
quired addressing mode argument. The following list specifies
the format for each addressing mode supported by AS6801:
#data immediate data
byte or word data
*dir direct page addressing
(see .setdp directive)
0 <= dir <= 255
(the value of dir must be defined
within the current assembly)
,x register indirect addressing
zero offset
offset,x register indirect addressing
0 <= offset <= 255
(the value of offset must be defined
within the current assembly)
ext extended addressing
label branch label
The terms data, dir, offset, ext, and label may all be expres-
sions. The terms dir, offset, and label are not allowed to be
external references.
Note that not all addressing modes are valid with every in-
struction, refer to the 6801/6303 technical data for valid
modes.
AS6801 ASSEMBLER PAGE B-3
6801 INSTRUCTION SET
B.4.1 Inherent Instructions
aba abx
cba clc
cli clv
daa des
dex ins
inx mul
nop rti
rts sba
sec sei
sev swi
tab tap
tba tpa
tsx txs
wai
B.4.2 Branch Instructions
bra label brn label
bhi label bls label
bcc label bhs label
bcs label blo label
bne label beq label
bvc label bvs label
bpl label bmi label
bge label blt label
bgt label ble label
bsr label
B.4.3 Single Operand Instructions
asla aslb asld
asl a asl b asl d
asl []
asra asrb
asr a asr b
asr []
clra clrb
clr a clr b
clr []
coma comb
com a com b
com []
deca decb
dec a dec b
AS6801 ASSEMBLER PAGE B-4
6801 INSTRUCTION SET
dec []
eora eorb
eor a eor b
eor []
inca incb
inc a inc b
inc []
lsla lslb lsld
lsl a lsl b lsl d
lsl []
lsra lsrb lsrd
lsr a lsr b lsr d
lsr []
nega negb
neg a neg b
neg []
psha pshb pshx
psh a psh b psh x
pula pulb pulx
pul a pul b pul x
rola rolb
rol a rol b
rol []
rora rorb
ror a ror b
ror []
tsta tstb
tst a tst b
tst []
AS6801 ASSEMBLER PAGE B-5
6801 INSTRUCTION SET
B.4.4 Double Operand Instructions
adca [] adcb []
adc a [] adc b []
adda [] addb [] addd []
add a [] add b [] add d []
anda [] andb []
and a [] and b []
bita [] bitb []
bit a [] bit b []
cmpa [] cmpb []
cmp a [] cmp b []
ldaa [] ldab []
lda a [] lda b []
oraa [] orab []
ora a [] ora b []
sbca [] sbcb []
sbc a [] sbc b []
staa [] stab []
sta a [] sta b []
suba [] subb [] subd []
sub a [] sub b [] sub d []
B.4.5 Jump and Jump to Subroutine Instructions
jmp [] jsr []
B.4.6 Long Register Instructions
cpx [] ldd []
lds [] ldx []
std [] sts []
stx []
AS6801 ASSEMBLER PAGE B-6
6801 INSTRUCTION SET
B.4.7 6303 Specific Instructions
aim #data, [] eim #data, []
oim #data, [] tim #data, []
xgdx slp
APPENDIX C
AS6804 ASSEMBLER
Because the 6804 has only a 256 byte ram space the .setdp
directive is not supported.
C.1 6804 REGISTER SET
The following is a list of the 6804 registers used by AS6804:
x,y - index registers
C.2 6804 INSTRUCTION SET
The following tables list all 6804 mnemonics recognized by
the AS6804 assembler. The designation [] refers to a required
addressing mode argument. The following list specifies the
format for each addressing mode supported by AS6804:
#data immediate data
byte or word data
,x register indirect addressing
dir direct addressing
0 <= dir <= 255
ext extended addressing
label branch label
The terms data, dir, and ext may be expressions. The terms dir
and label are not allowed to be external references.
Note that not all addressing modes are valid with every in-
struction, refer to the 6804 technical data for valid modes.
AS6804 ASSEMBLER PAGE C-2
6804 INSTRUCTION SET
C.2.1 Inherent Instructions
coma decx
decy incx
incy rola
rti rts
stop tax
tay txa
tya wait
C.2.2 Branch Instructions
bne label beq label
bcc label bcs label
C.2.3 Single Operand Instructions
add []
and []
cmp []
dec []
inc []
lda []
sta []
sub []
C.2.4 Jump and Jump to Subroutine Instructions
jsr []
jmp []
C.2.5 Bit Test Instructions
brclr #data,[],label
brset #data,[],label
bclr #label,[]
bset #label,[]
AS6804 ASSEMBLER PAGE C-3
6804 INSTRUCTION SET
C.2.6 Load Immediate data Instruction
mvi [],#data
C.2.7 6804 Derived Instructions
asla
bam label
bap label
bxmi label
bxpl label
bymi label
bypl label
clra
clrx
clry
deca
decx
decy
inca
incx
incy
ldxi #data
ldyi #data
nop
tax
tay
txa
tya
APPENDIX D
AS6805 ASSEMBLER
D.1 .setdp DIRECTIVE
Format:
.setdp [area]
The .setdp directive informs the assembler in which area the
direct page is located. If the optional area name is left
blank, then the current area is defined as containing the direct
page. If a .setdp directive is not issued the assembler
defaults the direct page to the area "_CODE". The .setdp direc-
tive is required when using the relocation features so that the
direct page space may be positioned properly at link time.
The assembler verifies that any variable referenced as a
direct variable is located in this area and has a value from 0
to 255.
D.2 6805 REGISTER SET
The following is a list of the 6805 registers used by AS6805:
a - 8-bit accumulator
x - index register
AS6805 ASSEMBLER PAGE D-2
6805 INSTRUCTION SET
D.3 6805 INSTRUCTION SET
The following tables list all 6805 mnemonics recognized by
the AS6805 assembler. The designation [] refers to a required
addressing mode argument. The following list specifies the
format for each addressing mode supported by AS6805:
#data immediate data
byte or word data
*dir direct page addressing
(see .setdp directive)
0 <= dir <= 255
(the value of dir must be defined
within the current assembly)
,x register indirect addressing
zero offset
offset,x register indirect addressing
0 <= offset <= 255 --- byte mode
256 <= offset <= 65535 --- word mode
(an externally defined offset uses the
word mode)
ext extended addressing
label branch label
The terms data, dir, offset, and ext may all be expressions.
The terms dir and label are not allowed to be an external refer-
ence.
Note that not all addressing modes are valid with every in-
struction, refer to the 6805 technical data for valid modes.
D.3.1 Control Instructions
clc cli
nop rsp
rti rts
sec sei
stop swi
tax txa
wait
AS6805 ASSEMBLER PAGE D-3
6805 INSTRUCTION SET
D.3.2 Bit Manipulation Instructions
brset #data,*dir,label
brclr #data,*dir,label
bset #data,*dir
bclr #data,*dir
D.3.3 Branch Instructions
bra label brn label
bhi label bls label
bcc label bcs label
bne label beq label
bhcc label bhcs label
bpl label bmi label
bmc label bms label
bil label bih label
bsr label
AS6805 ASSEMBLER PAGE D-4
6805 INSTRUCTION SET
D.3.4 Read-Modify-Write Instructions
nega negx
neg []
coma comx
com []
lsra lsrx
lsr []
rora rorx
ror []
asra asrx
asr []
lsla lslx
lsl []
rola rolx
rol []
deca decx
dec []
inca incx
inc []
tsta tstx
tst []
clra clrx
clr []
D.3.5 Register\Memory Instructions
sub [] cmp []
sbc [] cpx []
and [] bit []
lda [] sta []
eor [] adc []
ora [] add []
ldx [] stx []
AS6805 ASSEMBLER PAGE D-5
6805 INSTRUCTION SET
D.3.6 Jump and Jump to Subroutine Instructions
jmp [] jsr []
APPENDIX E
AS6809 ASSEMBLER
E.1 .setdp DIRECTIVE
Format:
.setdp base [,area]
The .setdp directive informs the assembler the base address of
the direct page region (the low-order 8-bits of the base address
are cleared) and specifies the direct page area. If the op-
tional area name is left blank, then the current area is defined
as containing the direct page. If a .setdp directive is not is-
sued the assembler defaults the direct page to the area "_CODE".
The .setdp directive is required when using the relocation
features so that the direct page space may be positioned
properly at link time.
The assembler verifies that any variable referenced as a
direct variable is located in this area and has a value from 0
to 255. It is the programmers responsibility to load the dp
register with the correct page segment.
E.2 6809 REGISTER SET
The following is a list of the 6809 registers used by AS6809:
a,b - 8-bit accumulators
d - 16-bit accumulator <a:b>
x,y - index registers
s,u - stack pointers
pc - program counter
cc - condition code
dp - direct page
AS6809 ASSEMBLER PAGE E-2
6809 INSTRUCTION SET
E.3 6809 INSTRUCTION SET
The following tables list all 6809 mnemonics recognized by
the AS6809 assembler. The designation [] refers to a required
addressing mode argument. The following list specifies the
format for each addressing mode supported by AS6809:
#data immediate data
byte or word data
*dir direct page addressing
(see .setdp directive)
0 <= dir <= 255
(the value of dir must be defined
within the current assembly)
label branch label
r,r1,r2 registers
cc,a,b,d,dp,x,y,s,u,pc
,-x ,--x register indexed
autodecrement
,x+ ,x++ register indexed
autoincrement
,x register indexed addressing
zero offset
offset,x register indexed addressing
-16 <= offset <= 15 --- 5-bit
-128 <= offset <= -17 --- 8-bit
16 <= offset <= 127 --- 8-bit
-32768 <= offset <= -129 --- 16-bit
128 <= offset <= 32767 --- 16-bit
(external definition of offset
uses 16-bit mode)
a,x accumulator offset indexed addressing
ext extended addressing
ext,pc pc addressing ( pc <- pc + ext )
ext,pcr pc relative addressing
[,--x] register indexed indirect
autodecrement
[,x++] register indexed indirect
AS6809 ASSEMBLER PAGE E-3
6809 INSTRUCTION SET
autoincrement
[,x] register indexed indirect addressing
zero offset
[offset,x] register indexed indirect addressing
-128 <= offset <= 127 --- 8-bit
-32768 <= offset <= -129 --- 16-bit
128 <= offset <= 32767 --- 16-bit
(external definition of offset
uses 16-bit mode)
[a,x] accumulator offset indexed
indirect addressing
[ext] extended indirect addressing
[ext,pc] pc indirect addressing
( [pc <- pc + ext] )
[ext,pcr] pc relative indirect addressing
The terms data, dir, label, offset, and ext may all be expres-
sions. The terms dir and a short label are not allowed to be an
external reference.
Note that not all addressing modes are valid with every in-
struction, refer to the 6809 technical data for valid modes.
AS6809 ASSEMBLER PAGE E-4
6809 INSTRUCTION SET
E.3.1 Inherent Instructions
abx daa
mul nop
rti rts
sex swi
swi1 swi2
swi3 sync
E.3.2 Short Branch Instructions
bcc label bcs label
beq label bge label
bgt label bhi label
bhis label bhs label
ble label blo label
blos label bls label
blt label bmi label
bne label bpl label
bra label brn label
bvc label bvs label
bsr label
E.3.3 Long Branch Instructions
lbcc label lbcs label
lbeq label lbge label
lbgt label lbhi label
lbhis label lbhs label
lble label lblo label
lblos label lbls label
lblt label lbmi label
lbne label lbpl label
lbra label lbrn label
lbvc label lbvs label
lbsr label
AS6809 ASSEMBLER PAGE E-5
6809 INSTRUCTION SET
E.3.4 Single Operand Instructions
asla aslb
asl []
asra asrb
asr []
clra clrb
clr []
coma comb
com []
deca decb
dec []
inca incb
inc []
lsla lslb
lsl []
lsra lsrb
lsr []
nega negb
neg []
rola rolb
rol []
rora rorb
ror []
tsta tstb
tst []
AS6809 ASSEMBLER PAGE E-6
6809 INSTRUCTION SET
E.3.5 Double Operand Instructions
adca [] adcb []
adda [] addb []
anda [] andb []
bita [] bitb []
cmpa [] cmpb []
eora [] eorb []
lda [] ldb []
ora [] orb []
sbca [] sbcb []
sta [] stb []
suba [] subb []
E.3.6 D-register Instructions
addd [] subd []
cmpd [] ldd []
std []
E.3.7 Index/Stack Register Instructions
cmps [] cmpu []
cmpx [] cmpy []
lds [] ldu []
ldx [] ldy []
leas [] leau []
leax [] leay []
sts [] stu []
stx [] sty []
pshs r pshu r
puls r pulu r
AS6809 ASSEMBLER PAGE E-7
6809 INSTRUCTION SET
E.3.8 Jump and Jump to Subroutine Instructions
jmp [] jsr []
E.3.9 Register - Register Instructions
exg r1,r2 tfr r1,r2
E.3.10 Condition Code Register Instructions
andcc #data orcc #data
cwai #data
E.3.11 6800 Compatibility Instructions
aba cba
clc cli
clv des
dex ins
inx
ldaa [] ldab []
oraa [] orab []
psha pshb
pula pulb
sba sec
sei sev
staa [] stab []
tab tap
tba tpa
tsx txs
wai
APPENDIX F
AS6811 ASSEMBLER
F.1 .setdp DIRECTIVE
Format:
.setdp [area]
The .setdp directive informs the assembler in which area the
direct page is located. If the optional area name is left
blank, then the current area is defined as containing the direct
page. If a .setdp directive is not issued the assembler
defaults the direct page to the area "_CODE". The .setdp direc-
tive is required when using the relocation features so that the
direct page space may be positioned properly at link time.
The assembler verifies that any variable referenced as a
direct variable is located in this area and has a value from 0
to 255.
F.2 6811 REGISTER SET
The following is a list of the 6811 registers used by AS6811:
a,b - 8-bit accumulators
d - 16-bit accumulator <a:b>
x,y - index registers
AS6811 ASSEMBLER PAGE F-2
6811 INSTRUCTION SET
F.3 6811 INSTRUCTION SET
The following tables list all 6811 mnemonics recognized by
the AS6811 assembler. The designation [] refers to a required
addressing mode argument. The following list specifies the
format for each addressing mode supported by AS6811:
#data immediate data
byte or word data
*dir direct page addressing
(see .setdp directive)
0 <= dir <= 255
(the value of dir must be defined
within the current assembly)
,x register indirect addressing
zero offset
offset,x register indirect addressing
0 <= offset <= 255
(the value of offset must be defined
within the current assembly)
ext extended addressing
label branch label
The terms data, dir, offset, and ext may all be expressions.
The terms dir, offset, and label are not allowed to be external
references.
Note that not all addressing modes are valid with every in-
struction, refer to the 6811 technical data for valid modes.
AS6811 ASSEMBLER PAGE F-3
6811 INSTRUCTION SET
F.3.1 Inherent Instructions
aba abx
aby cba
clc cli
clv daa
des dex
dey fdiv
idiv ins
inx iny
mul nop
rti rts
sba sec
sei sev
stop swi
tab tap
tba tpa
tsx txs
wai xgdx
xgdy
psha pshb
psh a psh b
pshx pshy
psh x psh y
pula pulb
pul a pul b
pulx puly
pul x pul y
F.3.2 Branch Instructions
bra label brn label
bhi label bls label
bcc label bhs label
bcs label blo label
bne label beq label
bvc label bvs label
bpl label bmi label
bge label blt label
bgt label ble label
bsr label
AS6811 ASSEMBLER PAGE F-4
6811 INSTRUCTION SET
F.3.3 Single Operand Instructions
asla aslb asld
asl a asl b asl d
asl []
asra asrb
asr a asr b
asr []
clra clrb
clr a clr b
clr label
coma comb
com a com b
com []
deca decb
dec a dec b
dec []
inca incb
inc a inc b
inc []
lsla lslb lsld
lsl a lsl b lsl d
lsl []
lsra lsrb lsrd
lsr a lsr b lsr d
lsr []
nega negb
neg a neg b
neg []
rola rolb
rol a rol b
rol []
rora rorb
ror a ror b
ror []
tsta tstb
tst a tst b
tst []
AS6811 ASSEMBLER PAGE F-5
6811 INSTRUCTION SET
F.3.4 Double Operand Instructions
adca [] adcb []
adc a [] adc b []
adda [] addb [] addd []
add a [] add b [] add d []
anda [] andb []
and a [] and b []
bita [] bitb []
bit a [] bit b []
cmpa [] cmpb []
cmp a [] cmp b []
eora [] eorb []
eor a [] eor b []
ldaa [] ldab []
lda a [] lda b []
oraa [] orab []
ora a [] ora b []
sbca [] sbcb []
sbc a [] sbc b []
staa [] stab []
sta a [] sta b []
suba [] subb [] subd []
sub a [] sub b [] sub d []
F.3.5 Bit Manupulation Instructions
bclr [],#data
bset [],#data
brclr [],#data,label
brset [],#data,label
AS6811 ASSEMBLER PAGE F-6
6811 INSTRUCTION SET
F.3.6 Jump and Jump to Subroutine Instructions
jmp [] jsr []
F.3.7 Long Register Instructions
cpx [] cpy []
ldd [] lds []
ldx [] ldy []
std [] sts []
stx [] sty []
APPENDIX G
AS8085 ASSEMBLER
G.1 8085 REGISTER SET
The following is a list of the 8080/8085 registers used by
AS8085:
a,b,c,d,e,h,l - 8-bit accumulators
m - memory through (hl)
sp - stack pointer
psw - status word
G.2 8085 INSTRUCTION SET
The following tables list all 8080/8085 mnemonics recognized
by the AS8085 assembler. The following list specifies the
format for each addressing mode supported by AS8085:
#data immediate data
byte or word data
r,r1,r2 register or register pair
psw,a,b,c,d,e,h,l
bc,de,hl,sp,pc
m memory address using (hl)
addr direct memory addressing
label call or jump label
The terms data, m, addr, and label may be expressions.
Note that not all addressing modes are valid with every in-
struction, refer to the 8080/8085 technical data for valid
modes.
AS8085 ASSEMBLER PAGE G-2
8085 INSTRUCTION SET
G.2.1 Inherent Instructions
cma cmc
daa di
ei hlt
nop pchl
ral rar
ret rim
rrc rlc
sim sphl
stc xchg
xthl
G.2.2 Register/Memory/Immediate Instructions
adc r adc m aci #data
add r add m adi #data
ana r ana m ani #data
cmp r cmp m cpi #data
ora r ora m ori #data
sbb r sbb m sbi #data
sub r sub m sui #data
xra r xra m xri #data
G.2.3 Call and Return Instructions
cc label rc
cm label rm
cnc label rnc
cnz label rnz
cp label rp
cpe label rpe
cpo label rpo
cz label rz
call label
G.2.4 Jump Instructions
jc label
jm label
jnc label
jnz label
jp label
jpe label
jpo label
jz label
jmp label
AS8085 ASSEMBLER PAGE G-3
8085 INSTRUCTION SET
G.2.5 Input/Output/Reset Instructions
in data
out data
rst data
G.2.6 Move Instructions
mov r1,r2
mov r,m
mov m,r
mvi r,#data
mvi m,#data
G.2.7 Other Instructions
dcr r dcr m
inr r inr m
dad r dcx r
inx r ldax r
pop r push r
stax r
lda addr lhld addr
shld addr sta addr
lxi r,#data
APPENDIX H
ASZ80 ASSEMBLER
H.1 .hd64 DIRECTIVE
Format:
.hd64
The .hd64 directive enables processing of the HD64180 specific
mnemonics not included in the Z80 instruction set. HD64180
mnemonics encountered without the .hd64 directive will be
flagged with an 'o' error.
H.2 Z80 REGISTER SET AND CONDITIONS
The following is a complete list of register designations and
condition mnemonics:
byte registers - a,b,c,d,e,h,l,i,r
register pairs - af,af',bc,de,hl
word registers - pc,sp,ix,iy
C - carry bit set
M - sign bit set
NC - carry bit clear
NZ - zero bit clear
P - sign bit clear
PE - parity even
PO - parity odd
Z - zero bit set
ASZ80 ASSEMBLER PAGE H-2
Z80 INSTRUCTION SET
H.3 Z80 INSTRUCTION SET
The following tables list all Z80/HD64180 mnemonics recog-
nized by the ASZ80 assembler. The designation [] refers to a
required addressing mode argument. The following list specifies
the format for each addressing mode supported by ASZ80:
#data immediate data
byte or word data
n byte value
rg a byte register
a,b,c,d,e,h,l
rp a register pair
bc,de,hl
(hl) implied addressing or
register indirect addressing
(label) direct addressing
offset(ix) indexed addressing with
an offset
label call/jmp/jr label
The terms data, dir, offset, and ext may all be expressions.
The terms dir and offset are not allowed to be external refer-
ences.
Note that not all addressing modes are valid with every in-
struction, refer to the Z80/HD64180 technical data for valid
modes.
ASZ80 ASSEMBLER PAGE H-3
Z80 INSTRUCTION SET
H.3.1 Inherent Instructions
ccf cpd
cpdr cpi
cpir cpl
daa di
ei exx
halt neg
nop reti
retn rla
rlca rld
rra rrca
rrd scf
H.3.2 Implicit Operand Instructions
adc a,[] adc []
add a,[] add []
and a,[] and []
cp a,[] cp []
dec a,[] dec []
inc a,[] inc []
or a,[] or []
rl a,[] rl []
rlc a,[] rlc []
rr a,[] rr []
rrc a,[] rrc []
sbc a,[] sbc []
sla a,[] sla []
sra a,[] sra []
srl a,[] srl []
sub a,[] sub []
xor a,[] xor []
ASZ80 ASSEMBLER PAGE H-4
Z80 INSTRUCTION SET
H.3.3 Load Instruction
ld rg,[] ld [],rg
ld (bc),a ld a,(bc)
ld (de),a ld a,(de)
ld (label),a ld a,(label)
ld (label),rp ld rp,(label)
ld i,a ld r,a
ld a,i ld a,r
ld sp,hl ld sp,ix
ld sp,iy ld rp,#data
ldd lddr
ldi ldir
H.3.4 Call/Return Instructions
call C,label ret C
call M,label ret M
call NC,label ret NC
call NZ,label ret NZ
call P,label ret P
call PE,label ret PE
call PO,label ret PO
call Z,label ret Z
call label ret
H.3.5 Jump and Jump to Subroutine Instructions
jp C,label jp M,label
jp NC,label jp NZ,label
jp P,label jp PE,label
jp PO,label jp Z,label
jp (hl) jp (ix)
jp (iy) jp label
djnz label
jr C,label jr NC,label
jr NZ,label jr Z,label
jr label
ASZ80 ASSEMBLER PAGE H-5
Z80 INSTRUCTION SET
H.3.6 Bit Manipulation Instructions
bit n,[]
res n,[]
set n,[]
H.3.7 Interrupt Mode and Reset Instructions
im n
im n
im n
rst n
H.3.8 Input and Output Instructions
in a,(n) in rg,(c)
ind indr
ini inir
out (n),a out (c),rg
outd otdr
outi otir
H.3.9 Register Pair Instructions
add hl,rp add ix,rp
add iy,rp
adc hl,rp sbc hl,rp
ex (sp),hl ex (sp),ix
ex (sp),iy
ex de,hl
ex af,af'
push rp pop rp
ASZ80 ASSEMBLER PAGE H-6
Z80 INSTRUCTION SET
H.3.10 HD64180 Specific Instructions
in0 rg,(n)
out0 (n),rg
otdm otdmr
otim otimr
mlt bc mlt de
mlt hl mlt sp
slp
tst a
tstio #data